package com.casa_apoio.estoque.mode.entity;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import org.hibernate.annotations.ForeignKey;

@Entity
public class Entrada implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer idEntrada;
    private int quantidade;
    private Double valor;
    @Temporal(TemporalType.DATE)
    private Date validade;   
    private boolean finalizado;

    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    @ForeignKey(name = "entradaProduto")
    @JoinColumn(name = "idProduto", referencedColumnName = "idProduto")
    private Produto produto;

    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    @ForeignKey(name = "estoqueCabecalho")
    @JoinColumn(name = "idCabEstoque", referencedColumnName = "idCabEstoque")
    private CabEstoque cabEstoque;

    public Entrada() {
        produto = new Produto();
        cabEstoque = new CabEstoque();
    }

    public Integer getIdEntrada() {
        return idEntrada;
    }

    public void setIdEntrada(Integer idEntrada) {
        this.idEntrada = idEntrada;
    }

    public int getQuantidade() {
        return quantidade;
    }

    public void setQuantidade(int quantidade) {
        this.quantidade = quantidade;
    }

    public Double getValor() {
        return valor;
    }

    public void setValor(Double valor) {
        this.valor = valor;
    }

    public Date getValidade() {
        return validade;
    }

    public void setValidade(Date validade) {
        this.validade = validade;
    }

    public boolean isFinalizado() {
        return finalizado;
    }

    public void setFinalizado(boolean finalizado) {
        this.finalizado = finalizado;
    }

    public Produto getProduto() {
        return produto;
    }

    public void setProduto(Produto produto) {
        this.produto = produto;
    }

    public CabEstoque getCabEstoque() {
        return cabEstoque;
    }

    public void setCabEstoque(CabEstoque cabEstoque) {
        this.cabEstoque = cabEstoque;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 67 * hash + (this.idEntrada != null ? this.idEntrada.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Entrada other = (Entrada) obj;
        if (this.idEntrada != other.idEntrada && (this.idEntrada == null || !this.idEntrada.equals(other.idEntrada))) {
            return false;
        }
        return true;
    }

}
